package Shifu.MainServer.Net;

import Shifu.MainServer.Management.ChunkDescriptor;
import Shifu.MainServer.Management.PromotionSet;
import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * Interfaccia del MobileServer che verra esportato
 * sul client
 */

public interface PeerServer extends Remote {

	/**
	 * Salva un chunk sul PeerServer
	 * @param cd il descrittore del chunk
	 * @param buffer il chunk
	 */

	public int storeChunk(ChunkDescriptor cd,byte[] buffer) throws RemoteException;

	/**
 	 * Restituisce un chunk voluto
	 * @param cd il descrittore dei chunk che si vuole ottenere
	 */

	public byte[] getChunk(ChunkDescriptor cd) throws RemoteException;

	
	/**
	 * Rimuove un determinato chunk del PeerServer
	 * @param cd il descrittore del chunk che si vuole eliminare
	 */

	public int removeChunk(ChunkDescriptor cd) throws RemoteException;


	/**
	 * Risponde se il PeerServer è ancora alive
	 * @return 0 se è alive
	 */

	public int areYouAlive() throws RemoteException;


	/**
	 * Promuove un peers da livello leecher a seeder
	 * @return 1 se la promozione è avvenuta con successo, -1 altrimenti.
	 */
	
	public int getPromotion(PromotionSet ps) throws RemoteException;


}
